Android — CoordinatorLayout总结

CoordinatorLayout

CoordinatorLayout 即协调布局,它作为Layout的最外一层布局,可以协调子View做出特定响应动作的一个容器,这些响应动作是通过Behavior来指定的,比如用于协调AppbarLayout与ScrollView滑动的Behavior,如下:

1
2
3
4
5
6
7
8
9
10
11
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="18dp"
android:text="@string/large_text"/>
</android.support.v4.widget.NestedScrollView>

AppbarLayout

继承至LinearLayout,严重依赖于CoordinatorLayout ,必须用于CoordinatorLayout 的直接子View。它可以让你定制当某个可滑动的View滑动手势发生改变时,内部View响应一些动作。这些动作通过 app:layout_scrollFlags 来指定。

该值有以下几种:

  1. scroll 这个View会随着可滚动View一起滚动,就好像该子View属于ScrollView的一部分一样。
  2. enterAlways 当ScrollView向下滚动时,子View将直接向下滚动而不管ScrollView是否在滚动,要与 scroll 搭配使用,否则不能滑动。
  3. enterAlwaysCollapsed 当ScrollView向下滚动时,子View下滑至折叠的高度,当ScrollView到达滑动范围的结束值的时候,滑动View剩下的部分开始滑动,这个折叠的高度是通过View的minHeight(最小高度)指定的。必须要搭配 scroll|enterAlways一起使用。
  4. exitUntilCollapsed 当ScrollView滑出屏幕时,滑动View先响应滑动事件,滑动至折叠高度,也就是通过 minHeight设置的最小高度后,就固定不动了,再把滑动事件交给ScrollView继续滑动,需要搭配 srcoll 使用。
  5. snap 在滚动结束后,如果view只是部分可见,它将滑动到最近的边界。比如,如果View的底部只有49%可见,它将滚动离开屏幕,而如果底部有51%可见,它将滚动到完全显示。同样需要搭配 scroll 使用。

CollapsingToolbarLayout

是对Toolbar的包装并且实现了折叠app bar效果,使用时,要作为AppbarLayout的直接子View。有以下特性:

  1. Collapsing title(折叠标题)当布局全部可见的时候,title是最大的,当布局开始滑出屏幕,title将变得越来越小,可以通过setTitle来设置要显示的标题。

    但是当Toolbar和CollapsingToolbarLayout 同时设置了title时,不会显示Toolbar的title,如果要显示Toolbar的title,可以 collapsingToolbarLayout.setTitle(“”);

  2. Content scrim(内容纱布)当CollapsingToolbarLayout 滑动到一个确定的阈值时将显示会隐藏内容纱布,可以通过setContentScriom(Drawable)来设置内容纱布的图片。内容纱布也可以是颜色值 app:contentScrim=”@color/colorPrimary”。

  3. Status bar scrim(状态栏纱布)当CollapsingToolbarLayout 滑动到一个确定的阈值时,状态栏显示或隐藏纱布,可以通过 setStatusBarScrim(Drawable)来设置纱布图片。同内容纱布一样,状态栏纱布也可以是一个颜色值,在xml 中用statusBarScrim 属性指定。

  4. Parallax scrolling children (有视差的滚动子View)让CollapsingToolbarLayout 的子View可以有视差的滚动,需要在xml中通过app:layout_collapseMode=”parallax”指定。

  5. Pinned position children(固定子View的位置)子View可以固定在全局空间内,这对于实现了折叠并且允许通过滚动布局来固定Toolbar这种情况非常实用,通过 app:layout_collapseMode=”pin”来指定。

总结

CoordinatorLayout是协调子View的,通过Behavior指定子View动作。AppbarLayout就是一个竖直方向的LinearLayout,只不过它可以定制子View的滑动。CollapsingToolbarLayout 是对Toolbar的包装,它有五个特性。AppbarLayout要作为CoordinatorLayout的直接子View使用,而CollapsingToolbarLayout要作为AppbarLayout的直接子View使用。

Demo

没什么多说的,直接Fork:https://github.com/pinguo-zhouwei/MaterialDesignSamples

我们一直都向往,面朝大海,春暖花开。 但是几人能做到,心中有爱,四季不败?